const {
  app, //管理事件生命周期
  BrowserWindow, //管理窗口
  globalShortcut, //监听按键
  screen, //显示器信息
  Tray, //右下角托盘
  Menu, //右下角托盘菜单
  ipcMain, //进程间通信 (IPC
  dialog,
} = require("electron");
const path = require("node:path");
const fs = require("fs");

// 第一个窗口
const Window_1 = (url, type) => {
  const W1 = new BrowserWindow({
    width: 1024,
    height: 768,
    icon: __dirname + "/assets/ico/favicon.ico", // 图标的路径
    maximizable: true, //支持最大化
    show: false, //为了让初始化窗口显示无闪烁，先关闭显示，等待加载完成后再显示。
    autoHideMenuBar: true, //隐藏菜单
    nodeIntegrationInSubFrames: true, // 允许在子页面(iframe)或子窗口(child window)中集成Node.js
    webviewTag: true, // 允许在页面内使用webview标签
    nodeIntegration: true, // 是否集成 Nodejs
    // fullscreen: true,//是否全屏幕
    // transparent: true, // 窗口透明
    // frame: false, // 无边框
    title: "主窗口",
    //网页功能设置
    webPreferences: {
      nodeIntegration: true, // 是否集成 Nodejs
      preload: path.join(__dirname, "preload.js"),
      // webSecurity: false, //关闭web权限检查，允许跨域
      enableRemoteModule: true, //使用remote模块
      contextIsolation: false, //上下文隔离  // 设置此项为false后，才可在渲染进程中使用 electron api
    },

    // icon: path.join(__dirname, 'app.ico') // 设置ico
  });

  // console.log(db);

  // W1.openDevTools(); // 打开开发工具
  // W1.loadURL("https://www.baidu.com"); //设置访问地址
  // W1.loadURL(url); //设置访问地址
  // W1.loadFile(url); // 加载 index.html
  if (type == "File") {
    W1.loadFile(url); // 加载 index.html
  } else if (type == "URL") {
    W1.loadURL(url); //设置访问地址
  } else {
    W1.loadFile("index.html"); // 加载 index.html
  }
  // W1.webContents.openDevTools(); //打开开发者工具
  // W1.setContentBounds(); //控制窗口尺寸与位置
  // W1.center(); //将窗口移动到屏幕中心
  W1.setTitle("主窗口1"); //设置程序Title
  // W1.maximize();//最大化
  // Menu.setApplicationMenu(null); //隐藏应用程序菜单.
  // W1.setAutoHideMenuBar(true); //自动隐藏菜单
  // 全屏函数
  // W1.setFullScreen(true);
  // W1.setSimpleFullScreen(true);
  // 全屏状态判断
  // W1.isFullScreen();
  // W1.isSimpleFullScreen();
  // W1.setKiosk(true); // 设置窗口为全屏显示
  // W1.setFullScreen(true); //进入软件即开启全屏
  // W1.setIgnoreMouseEvents(true); // 鼠标穿透
  // W1.setAlwaysOnTop(true); // 保持置顶
  // W1.setSkipTaskbar(true); // 无任务栏图标
  //创建系统通知区菜单(右下角托盘)
  tray = new Tray(path.join(__dirname, "/assets/ico/favicon.ico"));
  const contextMenu = Menu.buildFromTemplate([
    {
      label: "退出",
      click: () => {
        W1.close();
        W1.destroy();
        W2.destroy();
        app.quit();
        app.exit();
      },
    },
  ]);
  tray.setToolTip("XP收银系统");
  tray.setContextMenu(contextMenu);

  // 初始化后再显示
  W1.on("ready-to-show", () => {
    W1.show();
  });

  //禁止程序打开第二次, 第二次打开时会将焦点聚焦到上次打开的窗口.
  const gotTheLock = app.requestSingleInstanceLock();
  if (!gotTheLock) {
    app.quit();
  } else {
    app.on("second-instance", (event, commandLine, workingDirectory) => {
      // 当运行第二个实例时,将会聚焦到Win1这个窗口
      if (W1) {
        if (W1.isMinimized()) W1.restore();
        W1.focus();
        W1.show();
      }
    });
  }

  //ESC键退出全屏
  globalShortcut.register("ESC", () => {
    console.log("ESC键");
  });

  // 监听窗口关闭
  W1.on("close", (event) => {
    event.preventDefault(); //先阻止一下默认行为，不然直接关了，提示框只会闪一下
    console.log("窗口即将销毁");
    // dialog.showErrorBox('通知', '退出失败');
    // showMessageBox 显示一个消息框，它将阻止该过程，直到消息框关闭。它返回点击按钮的索引。
    const showMessageBoxTC = async (e) => {
      const sssd = await dialog
        .showMessageBox(W1, {
          title: "提示",
          type: "info",
          buttons: ["确认", "取消"],
          message: "确认退出？",
        })
        .then((index) => {
          console.log("回调", index);
          if (index.response == 1) {
            console.log("index==1");
            // event.preventDefault();
          } else {
            console.log("index==0");
            // W1.destroy();
            // W1.close();
            app.exit();
            // app.quit();
          }
        })
        .catch((err) => {
          console.log(err);
        });
    };
    showMessageBoxTC();
    // if (W2) {
    //   W2.destroy();
    //   W2.close();
    //   app.quit();
    // }
  }); //Window_1 END

  W1.show();
}; //第一个窗口 END

// 第二个窗口
const Window_2 = () => {
  W2 = new BrowserWindow({
    // fullscreen: true,//是否全屏幕
    // transparent: true, // 窗口透明
    // frame: false, // 无边框
    // x: externalDisplay.bounds.x,
    // y: externalDisplay.bounds.y,
    x: 300,
    y: 700,
    height: 300,
    width: 400,
    maximizable: false, //支持最大化
    show: false, //为了让初始化窗口显示无闪烁，先关闭显示，等待加载完成后再显示。
    autoHideMenuBar: true, //隐藏菜单
    webPreferences: {
      nodeIntegration: true, // 是否集成 Nodejs
      //配置预加载脚本文件(preload)，此处起名为preloadOther
      //p.s.路径为绝对路径
      // preload: require('path').join(app.getAppPath(), 'preloadOther.js')
    },
  });
  //指定副屏幕打开的网页
  W2.loadURL("https://www.w3cschool.cn/electronmanual/82vz1ql9.html");
  // W2.setAutoHideMenuBar(true); //自动隐藏菜单
  // W2.setMenu(null); //隐藏菜单
  // W2.setIgnoreMouseEvents(true); // 鼠标穿透
  // W2.setAlwaysOnTop(true); // 保持置顶
  W2.setSkipTaskbar(true); // 无任务栏图标
  // W2.setKiosk(true); // 设置窗口为全屏显示
  W2.setTitle("顾显"); //设置程序Title
  W2.show();

  W2.on("closed", () => {
    W2 = null; //这一段放外面的话，如果你电脑没双屏会报错。
  });

  // W2.hide(); //隐藏当前窗口
  //主进程监听事件示例(用于双屏之间的通信)
  //需要预先引入 import { ipcMain } from 'electron'
  // ipcMain.on('pay-start', (event, detail) => {
  //   W2.webContents.send('pay-start', detail);
  // })
}; //第二个窗口 END

// Electron 初始化完成
app.whenReady().then(() => {
  const displays = screen.getAllDisplays(); // 显示器数量列表数组
  // console.log("显示器：", displays);
  // 从数组中返回副屏数据
  const externalDisplay = displays.find((display) => {
    return display.bounds.x !== 0 || display.bounds.y !== 0;
  });
  // console.log("externalDisplay：", externalDisplay);
  // 副屏显示器存在，创建窗口定位xY轴到副屏位置
  if (externalDisplay) {
    // console.log("=====");
  }
  const ini_path = path.join(__dirname, "scr/ini.json");

  fs.readFile(ini_path, "utf-8", (err, data) => {
    if (data) {
      const db = JSON.parse(data);

      console.log("配置参数", db);
      Window_1(db.posProUrl, db.posProTypeFileURL); //第一个窗口

      if (db.openPos == 1) {
        // Window_2(); //第二个窗口
      }
    }

    // PLUGIN_CONFIG.openAtLogin = Boolean(openAtLogin);
  });

  // 如果没有窗口打开则打开一个窗口 (macOS)
  app.on("activate", () => {
    // 点击托盘图标时通常会重新创建一个新窗口
    if (BrowserWindow.getAllWindows().length === 0) {
      Window_1("index.html", []);
    }
  });
  // 关闭所有窗口时退出应用 (Windows & Linux)
  app.on("window-all-closed", () => {
    //非macOS系统
    if (process.platform !== "darwin") {
      app.quit();
    }
  });
}); // Electron 初始化完成
